package com.tools.utils;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class BeanUtils extends BeanUtil {

    /**
     * 将MyBatis-Plus的IPage<PO>转换为IPage<VO>
     * @param poPage 包含PO对象的分页对象
     * @param converter 从PO转换到VO的函数
     * @param <PO> 持久化对象类型
     * @param <VO> 值对象类型
     * @return 包含VO对象的分页对象
     */
    public static <PO, VO> IPage<VO> convert(IPage<PO> poPage, Function<PO, VO> converter) {
        // 创建新的分页对象，保留原分页信息
        IPage<VO> voPage = new Page<>(poPage.getCurrent(), poPage.getSize(), poPage.getTotal());
        voPage.setCurrent(poPage.getPages());

        // 转换列表中的每个元素
        List<VO> voList = poPage.getRecords().stream()
                .map(converter)
                .collect(Collectors.toList());

        voPage.setRecords(voList);
        return voPage;
    }

}
